#ifndef EVENTOP_H
#define EVENTOP_H
/*
  对事件进行处理的类
  */
#include <QObject>
#include <QMultiMap>
class   QUdpSocket;
class   QTimer;

class EventOP : public QObject
{
    Q_OBJECT
public:
    explicit EventOP(QUdpSocket *paramUdpSocket,QObject *parent = 0);

signals:
    void sigInfo(QString info);

public slots:
    void timerEventForTTL();
    void processEvent(QByteArray dataGram,QString strIP,quint16 port);

private:
    QUdpSocket *udpSocket;
    QTimer *timer;
    //socketMacsMap记录某个socket对哪些节点感兴趣.QString的样子是“10.21.10.5:6752”
    QMultiMap <QString,qint64> socketMacsMultiMap;
    //socketTTLMap记录的是各个程序的活动状态。
    //当TTL值降到0时，删除在socketMacsMultiMap和socketTTLMap中的对应记录
    QMap <QString,quint8> socketTTLMap;

    void insertAddrMacsMultiMap(QString IPaddr,qint64 nodeAddr);
    void removeAddrMacsMultiMap(QString IPaddr,qint64 nodeAddr);
    void updateSocketTTLMap(QString IPaddr,quint8 newValue);

    void doWithExpiredSocket(QString IPaddr); //处理过期的socket
    //处理Event Watch包
    void doWithEventWatch(QString IPaddr,QList <qint64> listNodeAddr);
    //处理Event DisWatch包
    void doWithEventDisWatch(QString IPaddr,QList <qint64> listNodeAddr);
    //处理Event Alive包
    void doWithEventAlive(QString IPaddr,QList <qint64> listNodeAddr);
    //处理Event Notify包。该类包主要来自于databasecom.exe，把事件告知感兴趣的程序
    void doWithEventNotify(QString IPaddr,QByteArray dataGram);
};

#endif // EVENTOP_H
